home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / progtool / modula2 / module / xbios104.def < prev    next >
Text File  |  1995-11-25  |  15KB  |  449 lines

  1. (******************************************************************************)
  2. (*      This MODULE is Public Domain. Copy me like a beast!                   *)
  3. (*               Christian Ledermann                                          *)
  4. (*               Wölfelkofen 2                                                *)
  5. (*               84166 Adlkofen                                               *)
  6. (******************************************************************************)
  7. (*                                                                            *)
  8. (* Started:   20.12.92     03:54:30                                           *)
  9. (* Version: 20.12.89   00:404:12:54                                           *)
  10. (*                                                                            *)
  11. (******************************************************************************)
  12. (*                                                                            *)
  13. (* Diese Software ist ohne jede Garantie. Ich verspreche                      *)
  14. (* keinerlei Wartung und übernehme keine Verantwortung für Schäden die        *)
  15. (* durch die Benutzung dieses Programmes entstehen.                           *)
  16. (* Jegliche Ersatzansprüche lehne ich ab.                                     *)
  17. (*                                                                            *)
  18. (******************************************************************************)
  19. DEFINITION MODULE XBIOS104;
  20. (***********************************************************************)
  21. (* Ich hab mir hier mal die Mühe gemacht die ganzen XBIOS PROCEDUREn   *)
  22. (* mithilfe der Trapdefs von Holger Kleinschmidt zu implementieren.    *)
  23. (***********************************************************************)
  24. (* --------------------------------------------------------------
  25.          XBIOS - Modula interface to Atari extended BIOS functions
  26.    -------------------------------------------------------------------- *)
  27.  
  28. FROM SYSTEM IMPORT BYTE, ADDRESS;
  29.  
  30.  
  31. TYPE
  32.   (* InitMouse *)
  33.   MouseType = (DisableMouse,
  34.                RelativeMouse,
  35.                AbsoluteMouse,
  36.                UnusedMouse,
  37.                KeycodeMouse);
  38.  
  39.  
  40. TYPE
  41.   ParamBlk  = RECORD
  42.                 topMode: (OriginBotton, OriginTop);
  43.                 buttons: BYTE;
  44.                 xParam: BYTE;
  45.                 yParam: BYTE;
  46.                 (* for AbsoluteMouse mode only: *)
  47.                 xMax: CARDINAL;
  48.                 yMax: CARDINAL;
  49.                 xinitial: CARDINAL;
  50.                 yInitial: CARDINAL;
  51.               END;
  52.  
  53.  
  54. TYPE
  55.   Palette = ARRAY [0..15] OF CARDINAL;
  56.  
  57.  
  58. TYPE
  59.   FlowFlavor = (NONE, XONXOFF, RISCTS, XONXOFFRTSCTS);
  60.   SerialDevice = (RS232, Keyboard, MIDI);
  61.   SerialSpeed = (BPS19200, BPS9600, BPS4800, BPS3600, BPS2400, BPS2000,
  62.                  BPS1800,  BPS1200, BPS600,  BPS300,  BPS200,  BPS150,
  63.                  BPS134,   BPS118,  BPS75,    BPS50);
  64.  
  65.  
  66. TYPE
  67.   IORECPTR = POINTER TO IOREC;
  68.   IOREC = RECORD
  69.             ibuf: ADDRESS;        (* pointer to buffer *)
  70.             ibufsize: CARDINAL;   (* buffer size *)
  71.             ibufhd: CARDINAL;     (* head index *)
  72.             ibuftl: CARDINAL;     (* tail index *)
  73.             ibuflow: CARDINAL;    (* low water mark *)
  74.             ibufhi: CARDINAL;     (* high water mark *)
  75.           END;
  76.  
  77.  
  78. TYPE
  79.   PrtConfig = (DaisyWheel,      (* dot/datsy *)
  80.                Monochrome,      (* colour/mono *)
  81.                EpsonPrinter,    (* Atari/Epson *)
  82.                Final,           (* draft/final *)
  83.                RS232Port,       (* parallel/RS232 *)
  84.                SingleSheet,     (* form-feed/single sheet *)
  85.                PC6, PC7, PC8,   (* unused: *)
  86.                PC9, PCV10, PC11,
  87.                PC12, PC13, PC14,
  88.                PC15);
  89.  
  90.   PrtConfigSet = SET OF PrtConfig;
  91.  
  92. CONST
  93.   NoAlter = PrtConfigSet{DaisyWheel..PC15}; (* passed to ConfigurePrinter *)
  94.  
  95.  
  96. TYPE
  97.   KeyTransPtr = POINTER TO KeyTrans;
  98.   KeyTrans = ARRAY [0..127] OF BYTE;
  99.   KeyTablePtr = POINTER TO KeyTable;
  100.   KeyTable = RECORD
  101.                unshift: KeyTransPtr;
  102.                shift: KeyTransPtr;
  103.                capslock: KeyTransPtr;
  104.              END;
  105.  
  106. CONST
  107.   (* resolutions for GetScreenResolution and SetScreen *)
  108.   Low    = 0;
  109.   Medium = 1;
  110.   High   = 2;
  111.  
  112. CONST
  113.   (* normal value given for virgin floppies *)
  114.   VirginMedia = 0E5E5H;
  115.  
  116.  
  117. TYPE
  118.   Timer = (TimerA, TimerB, TimerC, TimerD);
  119.  
  120.  
  121. TYPE
  122.   KBVectorPtr = POINTER TO KBVector;
  123.   KBVector = RECORD
  124.                midi: ADDRESS;      (* MIDI input *)
  125.                kbderr: ADDRESS;    (* keyboard error *)
  126.                midierr: ADDRESS;   (* MIDI error *)
  127.                statvec: ADDRESS;   (* ikdb status packet *)
  128.                mousevec: ADDRESS;  (* mouse packet *)
  129.                clockvex: ADDRESS;  (* clock packet *)
  130.                joyvec: ADDRESS;    (* joystick packet *)
  131.              END;
  132.  
  133.  
  134. PROCEDURE InitMouse(type: MouseType; VAR param: ParamBlk; vec: PROC);
  135.   (* initialise mouse packet handler. *)
  136.  
  137.  
  138. PROCEDURE ScreenPhysicalBase(): ADDRESS;
  139.   (* get the screen's physical base address at beginning of next vblank. *)
  140.  
  141.  
  142. PROCEDURE ScreenLogicalBase(): ADDRESS;
  143.   (* get the screen's logical (GSX) base address. *)
  144.  
  145.  
  146. PROCEDURE GetResolution(): INTEGER;
  147.   (* return the screen's current resolution
  148.  
  149.      0 - low
  150.      1 - medium
  151.      2 - high *)
  152.  
  153.  
  154. PROCEDURE SetScreenBase(logLoc, physLoc: ADDRESS; rez: INTEGER);
  155.   (* set screen base address and resolutions.
  156.  
  157.  
  158.      logLoc: new logical screen location.
  159.      physLoc: new physical screen resolution.
  160.      rez: new resolution.
  161.  
  162.      NOTE: specifying -1 for any of the above will not change the
  163.              current value. *)
  164.  
  165.  
  166. PROCEDURE SetPalette(VAR palette: Palette);
  167.   (* set the contents of the hardware palette register. *)
  168.  
  169.  
  170. PROCEDURE SetColour(colourNum, colour: CARDINAL): CARDINAL;
  171.   (* set the colour of a palette table entry.
  172.  
  173.      coluorNum: the palette entry to set colour of.
  174.      coluor: the new colour.
  175.  
  176.      returns: the old value of the palette entry. *)
  177.  
  178.  
  179. PROCEDURE FloppyRead(buf: ADDRESS; drive: CARDINAL;
  180.                      sector, track, side: CARDINAL;
  181.                      count: CARDINAL):INTEGER;
  182.   (* read floppy disk sector(s) into buffer.
  183.  
  184.      buf: the buffer origin for the data.
  185.      drive: 0 => A:, 1 => B:
  186.      sector: sector number to start read from, normally i..9.
  187.      track: the track to seek to.
  188.      side: the side to select.
  189.      count: the number of sectors to read.
  190.  
  191.      returns: 0 => no error, otherwise DOS error code. *)
  192.  
  193.  
  194. PROCEDURE FloppyWrite(buf: ADDRESS; drive: CARDINAL;
  195.                       sector, track, side: CARDINAL;
  196.                       count: CARDINAL): INTEGER;
  197.   (* write buffer to floppy disk sector(s).
  198.  
  199.      parameters as for FloppyRead, except data is written from the buffer.
  200.  
  201.      returns: 0 => no error, otherwise DOS error code. *)
  202.  
  203.  
  204. PROCEDURE FloppyFormat(buf: ADDRESS; drive: CARDINAL;
  205.                        spt, track, side: CARDINAL;
  206.                        interleave, virgin: CARDINAL): INTEGER;
  207.   (* format a floppy disk track.
  208.  
  209.      buf: buffer large enough to hold bit image of a track (8K for 9 spt)
  210.      drive: the drive to format, 0 => A:, 1 => B:
  211.      spt: the number of sectors per track, normally 9
  212.      track: the track to format, 0 through 79.
  213.      side: the side to format, 0 or 1.
  214.      interleave: the interleave factor, normally 1.
  215.      virgin: the word fill value for new sectors.
  216.  
  217.      returns: 0 => no error, otherwise DOS error code.
  218.  
  219.      note: on return buf holds zero terminated list of sectors that would
  220.            not format. *)
  221.  
  222.  
  223. PROCEDURE MIDIWS(VAR string: ARRAY OF BYTE; len: CARDINAL);
  224.   (* write a string of characters to the MIDI port.
  225.  
  226.      str: the string to write.
  227.      len: the number of characters to write - 1. *)
  228.  
  229.  
  230. PROCEDURE MFPint(intNo: CARDINAL; vector: PROC);
  231.   (* set MFP interrupt vector.
  232.  
  233.      intNo: the MFP interrupt vector to set.
  234.      vector: the interrupt handler code. *)
  235.  
  236.  
  237. PROCEDURE IORec(dev: SerialDevice): IORECPTR;
  238.   (* return pointer to serial device IO record.
  239.  
  240.      NOTE: for the RS232 device, an output record immediately follows the
  241.              input record returned by this function. It may be accessed by:
  242.  
  243.            VAR x: IORECPTR;
  244.            x := IORECPTR(LONGCARD(IORec(RS232))+LONGCARD(TSIZE(IORec))); *)
  245.  
  246.  
  247. PROCEDURE ConfigureRS232(speed: SerialSpeed;
  248.                          flowctl: FlowFlavor;
  249.                          ucr, rsr, tsr, scr: INTEGER);
  250.   (* configure RS232 port.
  251.  
  252.      speed: the new RS232 speed.
  253.      flowctl: the handshaking used.
  254.      ucr, rsr, tsr, scr: set the appropriate 68981 registers. *)
  255.  
  256.  
  257. PROCEDURE SetKeyTable(VAR unshift, shift, capslock: KeyTransPtr):
  258.                                                           KeyTablePtr;
  259.   (* set pointers to keyboard translation tables. *)
  260.  
  261.  
  262. PROCEDURE Random(): LONGCARD;
  263.   (* return a random number. *)
  264.  
  265.  
  266. PROCEDURE PrototypeBootSector(buf: ADDRESS; serialNo: LONGINT;
  267.                               disktype: INTEGER; execFlag: INTEGER);
  268.   (* prototype an image of a boot sector.
  269.  
  270.      buf: the buffer to put the image into. (512 bytes)
  271.      serialNo: -1 => leave boot sector serial number unchanged.
  272.                00000000..00FFFFFF => new serial number for disk.
  273.                00000000..FFFFFFFE => generate random serial number.
  274.      disktype: -1 => leave information alone.
  275.                 0 = 40 tracks, SS (100K)
  276.                 1 = 40 tracks, DS (360K)
  277.                 2 = 80 tracks, SS (360K)
  278.                 3 = 80 tracks, DS (720K)
  279.      execFlag: 1 => bootable, 0 => non-bootable, -1 => leave alone. *)
  280.  
  281.  
  282. PROCEDURE FloppyVerify(buf: ADDRESS; drive: CARDINAL;
  283.                        sector, track, side: CARDINAL;
  284.                        count: CARDINAL): INTEGER;
  285.   (* verify floppy disk sectors are readable.
  286.  
  287.      parameters as for FloppyRead, except buffer must br 1024 bytes long. *)
  288.  
  289.  
  290. PROCEDURE ScreenDump;
  291.   (* dump screen to printer. *)
  292.  
  293.  
  294. PROCEDURE ConfigureCursor(rate, attrib: INTEGER): INTEGER;
  295.   (* configure cursor blink rate and attributes,
  296.  
  297.      rate: based on video scan rate; -1 => no change.
  298.      attrib: 0 => flash, 1 => steady, -1 => no change.
  299.  
  300.      returns: hi byte = old blink rate, lo byte = old attributes. *)
  301.  
  302.  
  303. PROCEDURE SetDateTime(datetime: LONGCARD);
  304.   (* set keyboard date and time.
  305.  
  306.      datetime: DOS format date & time; hi word = date, lo word = time. *)
  307.  
  308.  
  309. PROCEDURE GetDateTime (): LONGCARD;
  310.   (* get the date and time.
  311.  
  312.      returns: DOS format date & time. *)
  313.  
  314.  
  315. PROCEDURE BiosKeys;
  316.   (* restore keymappings to power up settings *)
  317.  
  318.  
  319. PROCEDURE KeyboardWS(VA|R str: ARRAY OF BYTE; len: CARDINAL);
  320.   (* write string to intelligent keyboard.
  321.  
  322.      str: the string to write.
  323.      len: the number of characters to write - 1. *)
  324.  
  325.  
  326. PROCEDURE DisableInterrupt(intNo: CARDINAL);
  327.   (* diable given 68981 interrupt. *)
  328.  
  329.  
  330. PROCEDURE EnableInterrupt(intNo: CARDINAL);
  331.   (* enable given 68981 interrupt. *)
  332.  
  333.  
  334. PROCEDURE GIRead(regno: CARDINAL): CARDINAL;
  335.   (* read register on the sound chip.
  336.  
  337.      regno: the register number to read.
  338.      returns: data in the register. *)
  339.  
  340.  
  341. PROCEDURE GIWrite(regno, data: CARDINAL);
  342.   (* write register on the sound chip.
  343.  
  344.      regno: the register number to write.
  345.      data: the data to write to the register. *)
  346.  
  347.  
  348. PROCEDURE GIOffBit(bitno: CARDINAL);
  349.   (* set a bit in the port A register to zero.
  350.  
  351.      bitno: the bit number to set to zero. *)
  352.  
  353.  
  354. PROCEDURE GIOnBit(bitno: CARDINAL);
  355.   (* set a bit in the port A register to one.
  356.  
  357.      bitno: the bit number to set to one. *)
  358.  
  359.  
  360. PROCEDURE SetTimerInterrupt(timer: Timer; control, data: CARDINAL;
  361.                                                        vec: PROC);
  362.   (* set an interrupt handler for timer.
  363.  
  364.      timer: the timer to install interrupt handler for.
  365.      control: timer's control register setting.
  366.      data: byte put into timer's data register.
  367.      vec: the interrupt procedure. *)
  368.  
  369.  
  370. PROCEDURE DoSound(x: ADDRESS);
  371.   (* set sound daemon's "program counter".
  372.  
  373.      x: the new program counter; program is a sequence of bytes of the
  374.         form:
  375.  
  376.         ( <opcode> <operand1> [<operand2> <operand3> ] )
  377.  
  378.         00 - 0F   sound register <opcode> := <operand1>
  379.         00        temporary register := <operand1>
  380.         01        sound register <operand1> := temporary register
  381.                   INC(temporary register,<operand2>) (*signed*)
  382.                   IF temporary register = <operand3> THEN
  383.                      go to next instuction
  384.                   ELSE
  385.                     wait for next update
  386.                     repeat instruction
  387.                   END
  388.         02 - FF   IF <operand1> = 0 THEN stop sound daemon
  389.                   ELSE set next updadte to <operand1> 50Hz ticks time
  390.                   END
  391.  
  392.         e.g. data for "bell" type sound:
  393.  
  394.         00 34 01 00 02 00 03 00 04 00 05 00 06 00 07 FE 08 10 09 00
  395.         0A 00 0B 00 0C 10 0D 09 FF 00
  396.  
  397. *)
  398.  
  399. PROCEDURE ConfigurePrinter(config: PrtConfig): PrtConfig;
  400.   (* configure printer.
  401.  
  402.      config: the new printer configuration.
  403.      returns: old printer configuration.
  404.  
  405.      NOTE: ConfigurePrinter(NoAlter) does not alter the old setting. *)
  406.  
  407.  
  408. PROCEDURE KeyboardVectors(): KBVectorPtr;
  409.   (* return pointer to keyboard vector table. *)
  410.  
  411.  
  412. PROCEDURE KeyboardRate(initial, repeat: INTEGER): CARDINAL;
  413.   (* set keyboard repeat rate and delay.
  414.  
  415.      initial: -1 => no change, otherwise initial delay, 50Hz.
  416.      repeat: -1 => no change, otherwise repeat rate, 50Hz.
  417.  
  418.      returns: hi byte = old initial delay, lo byte = old repeat rate. *)
  419.  
  420.  
  421. PROCEDURE PrintBlock (parameter: ADDRESS);
  422.  
  423. PROCEDURE VSync;
  424.   (* wait for next vertical blank interrupt. *)
  425.  
  426.  
  427. PROCEDURE SuperExec(Code: PROC);
  428.   (* Run code in supervisor mode with supervisor stack.
  429.  
  430.      Code: The code to run in supervisor mode, terminated with RTS.
  431.  
  432.      Note: The code is run with the supervisor stack. Do NOT attempt
  433.            to allocate large amounts of local data as the supervisor
  434.            stack will overflow. Note that the code in the "Code" proc
  435.            must have stack checking turned off (with a SS- directive)
  436.            otherwise a "stack overflow" error will be generated on entry
  437.            to the procedure. *)
  438.  
  439.  
  440. PROCEDURE PuntAES;
  441.   (* Throws away the GEM AES, freeing up memory. A re-boot will always be
  442.      performed after this call (unless AES is in ROM) *)
  443.  
  444.  
  445. (*************************** Ab TOS 1.04 **********************************)
  446. PROCEDURE FlopRate(drive,rate:INTEGER ):LONGINT;
  447.  
  448. END XBIOS104.
  449.